月毎の最終営業日にお手軽通知できる方法を検討してみた
毎月の最終営業日がある週は何かと締切の確認等も増えることかと思われます。
- 月初めに発生した経費の申請が月末締めの場合に、いつの間にか月越えてた
- 休暇申請が月末締めなのに漏れが発生していて、申請するようにと連絡が来た
等なかなか笑えない事態が発生しがちかもしれません。
一応個人的には気をつけているものの、念のためにと月毎の最終営業日リマインダー的なものを試みたところ、これが案外厄介だったため備忘録として残してみることにしました。
検討したものの使わなかった方法
Slackのリマインダー
月末営業日指定のリマインドは存在しないようです。ある程度余裕をもたせたリマインドにするという手もありますが、もう少し確実にしたかったため見送りました。
Google Calendarでのリマインド
Google Calendarでのリマインドを実施されている方は多いかもしれません。「Google calendar 月末」等で検索すると見つかると思いますが、
- Googleカレンダーのエクスポート機能でダウンロード
- ダウンロードしたzipファイル内のicsファイルを編集
RRULE:FREQ=MONTHLY;BYMONTHDAY=31
→RRULE:FREQ=MONTHLY;BYMONTHDAY=-1
と変える- カレンダーをインポートし直す
という手順になるようです。カレンダーからの編集で完了しているわけではないので、再編集に手間が掛かりやすいところがある点で見送りました。
GASを利用しての通知
これも利用した記事を多く見かけました。仕組みを組み立てるまでにそこまで手間が掛からないことも魅力だと思います。
問題はカレンダーデータを取得しようとしてnull
が返ってきたことです。どうやら、IDそのものに頻繁に変更が入るようで、検索してみたところ現在はjapanese__ja@holiday.calendar.google.com
を入力するようです。が、今回試した結果同じくnull
になりました。
Lambdaを利用しての通知
CloudWatch経由でLambdaを実行させてみるのも手だなと考えました。Lambdaの中で毎月の最終営業日だった場合に通知をかけるという想定です。
Pythonにて月末営業日を取得する手法としては、
- pypiからworkdaysとjapanese_holidayを導入
- japanese_holidayにて取得した休日データをworkdaysにて利用できる形へ変更する
- workdaysで休日データを考慮しながら月末最終営業日を取得する
- 当日が取得した月末営業日と一致するか調べる
という手順のようです。
手間かかりすぎる点と、デバッグが結構重くなりそうなので見送りました。
実際に利用した方法
Todoistのカレンダー機能を利用しました。日付指定にて「毎月最終就業日」と入れるだけで繰り返し判定となったためです。なお、繰り返し機能は無料プランでも利用可能です。
無料プランでのリマインド対策
Todoistそのもののリマインダー指定は有料プラン専用となっているため、他のサービスとの連携を検討したほうが良いかもしれません。
macOSであれば、通知センターのウィジェットに追加する方法もありそうです。
まとめ
プライベートにてTodoistをプレミアム登録しており、リマインダーが使えるため通知用タスクとして登録するという結論に至りました。
今回模索した幾つかの月末営業日リマインドの過程が何か参考になれば幸いです。